#include "main.h"
#include "Core_DWT.h"   

//使能DWT模块的功能位
#define DEMCR           ( *(unsigned int *)0xE000EDFC )
#define TRCENA          ( 0x01 << 24) // DEMCR的DWT使能位  
  
//使能CYCCNT计数器开始计数
#define DWT_CTRL        ( *(unsigned int *)0xE0001000 )
#define CYCCNTENA       ( 0x01 << 0 ) // DWT的CYCCNT使能位
 
//CYCCNT计数器的内部值
#define DWT_CYCCNT      ( *(unsigned int *)0xE0001004) //显示或设置处理器的周期计数值  

void DWT_Init(void)
{
	DEMCR |= TRCENA;
	DWT_CTRL |= CYCCNTENA;
	DWT_CYCCNT = 0;
}

uint32_t DWT_GetNowTime(void)
{
	return DWT_CYCCNT / 720;
}

/**
  * @简  述  软件微秒延时
  * @参  数  us：延时长度，单位us
  * @返回值  无
  */
void DWT_Delayus(uint16_t us)
{
	uint32_t next_time = DWT_CYCCNT + (uint32_t)us * 72; 	 // 72MHz时钟频率，72个时钟周期为1us
	while(DWT_CYCCNT < next_time){}    // 等待时间到达
}
